package apis

import (
	"fmt"
	"github.com/gin-gonic/gin"
	"github.com/go-admin-team/go-admin-core/sdk/api"
	"vrcm/src/vrcm/app/admin/service/dto/im"
	"vrcm/src/vrcm/app/admin/service/im"
	"vrcm/src/vrcm/common/apis"
)

type IM struct {
	api.Api
}

// CreateIM 创建房间
func (im IM) CreateIM(c *gin.Context) {
	req := dto.IMCreateReqDto{}
	s := imService.IMService{}
	err := im.MakeContext(c).
		MakeOrm().
		Bind(&req).
		MakeService(&s.Service).
		Errors
	if err != nil {
		im.Logger.Error(err)
		im.Error(apis.InternalError.Code, err, err.Error())
		return
	}
	res, err := s.CreateIM(req)
	if err != nil {
		im.Error(apis.CreateImError.Code, err, fmt.Sprintf("创建IM失败，\r\n失败信息 %s", err.Error()))
		return
	}
	im.OK(res, "创建IM成功")
}

// DestroyIM 关闭直播间
func (im IM) DestroyIM(c *gin.Context) {
	req := dto.IMDestroyReqDto{}
	s := imService.IMService{}
	err := im.MakeContext(c).
		MakeOrm().
		Bind(&req).
		MakeService(&s.Service).
		Errors
	if err != nil {
		im.Logger.Error(err)
		im.Error(apis.InternalError.Code, err, err.Error())
		return
	}
	err = s.DestroyIM(req)
	if err != nil {
		im.Error(apis.DestroyImError.Code, err, fmt.Sprintf("关闭IM失败，\r\n失败信息 %s", err.Error()))
		return
	}
	im.OK(nil, "关闭IM成功")
}

// MultiNoSpeak 批量禁言或取消禁言
func (im IM) MultiNoSpeak(c *gin.Context) {
	req := dto.MultiNoSpeakReqDto{}
	s := imService.IMService{}
	err := im.MakeContext(c).
		MakeOrm().
		Bind(&req).
		MakeService(&s.Service).
		Errors
	if err != nil {
		im.Logger.Error(err)
		im.Error(apis.InternalError.Code, err, err.Error())
		return
	}
	err = s.MultiNoSpeak(req)
	if err != nil {
		im.Error(apis.NoSpeakImError.Code, err, fmt.Sprintf("批量禁言或取消禁言失败，\r\n失败信息 %s", err.Error()))
		return
	}
	im.OK(nil, "禁言或取消禁言成功")
}

// GetUserSign 获取签名
func (im IM) GetUserSign(c *gin.Context) {
	req := dto.GetUserSignReqDto{}
	s := imService.IMService{}
	err := im.MakeContext(c).
		MakeOrm().
		Bind(&req).
		MakeService(&s.Service).
		Errors
	if err != nil {
		im.Logger.Error(err)
		im.Error(apis.InternalError.Code, err, err.Error())
		return
	}
	res, err := s.GetUserSign(req)
	if err != nil {
		im.Error(apis.GetUserSignError.Code, err, fmt.Sprintf("获取签名失败，\r\n失败信息 %s", err.Error()))
		return
	}
	im.OK(res, "获取签名成功")
}

// GetGroupInfo 获取聊天室信息
func (im IM) GetGroupInfo(c *gin.Context) {
	req := dto.GetGroupInfoReqDto{}
	s := imService.IMService{}
	err := im.MakeContext(c).
		MakeOrm().
		Bind(&req).
		MakeService(&s.Service).
		Errors
	if err != nil {
		im.Logger.Error(err)
		im.Error(apis.InternalError.Code, err, err.Error())
		return
	}
	res, err := s.GetGroupInfo(req)
	if err != nil {
		im.Error(apis.GetUserSignError.Code, err, fmt.Sprintf("获取签名失败，\r\n失败信息 %s", err.Error()))
		return
	}
	im.OK(res, "获取签名成功")
}
